home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 10 / AACD 10.iso / AACD / Games / WarpQuake / Src / sys_wina.s < prev    next >
Text File  |  2000-05-22  |  2KB  |  117 lines

  1. /*
  2. Copyright (C) 1996-1997 Id Software, Inc.
  3.  
  4. This program is free software; you can redistribute it and/or
  5. modify it under the terms of the GNU General Public License
  6. as published by the Free Software Foundation; either version 2
  7. of the License, or (at your option) any later version.
  8.  
  9. This program is distributed in the hope that it will be useful,
  10. but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  
  12.  
  13. See the GNU General Public License for more details.
  14.  
  15. You should have received a copy of the GNU General Public License
  16. along with this program; if not, write to the Free Software
  17. Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  18.  
  19. */
  20. //
  21. // sys_wina.s
  22. // x86 assembly-language Win-dependent routines.
  23.  
  24. #define GLQUAKE    1    // don't include unneeded defs
  25. #include "asm_i386.h"
  26. #include "quakeasm.h"
  27.  
  28. // LATER should be id386-dependent, and have an equivalent C path
  29.  
  30.     .data
  31.  
  32.     .align    4
  33. fpenv:
  34.     .long    0, 0, 0, 0, 0, 0, 0, 0
  35.  
  36.     .text
  37.  
  38. .globl C(MaskExceptions)
  39. C(MaskExceptions):
  40.     fnstenv    fpenv
  41.     orl        $0x3F,fpenv
  42.     fldenv    fpenv
  43.  
  44.     ret
  45.  
  46. #if 0
  47. .globl C(unmaskexceptions)
  48. C(unmaskexceptions):
  49.     fnstenv    fpenv
  50.     andl        $0xFFFFFFE0,fpenv
  51.     fldenv    fpenv
  52.  
  53.     ret
  54. #endif
  55.  
  56.     .data
  57.  
  58.     .align    4
  59. .globl    ceil_cw, single_cw, full_cw, cw, pushed_cw
  60. ceil_cw:    .long    0
  61. single_cw:    .long    0
  62. full_cw:    .long    0
  63. cw:            .long    0
  64. pushed_cw:    .long    0
  65.  
  66.     .text
  67.  
  68. .globl C(Sys_LowFPPrecision)
  69. C(Sys_LowFPPrecision):
  70.     fldcw    single_cw
  71.  
  72.     ret
  73.  
  74. .globl C(Sys_HighFPPrecision)
  75. C(Sys_HighFPPrecision):
  76.     fldcw    full_cw
  77.  
  78.     ret
  79.  
  80. .globl C(Sys_PushFPCW_SetHigh)
  81. C(Sys_PushFPCW_SetHigh):
  82.     fnstcw    pushed_cw
  83.     fldcw    full_cw
  84.  
  85.     ret
  86.  
  87. .globl C(Sys_PopFPCW)
  88. C(Sys_PopFPCW):
  89.     fldcw    pushed_cw
  90.  
  91.     ret
  92.  
  93. .globl C(Sys_SetFPCW)
  94. C(Sys_SetFPCW):
  95.     fnstcw    cw
  96.     movl    cw,%eax
  97. #if    id386
  98.     andb    $0xF0,%ah
  99.     orb        $0x03,%ah    // round mode, 64-bit precision
  100. #endif
  101.     movl    %eax,full_cw
  102.  
  103. #if    id386
  104.     andb    $0xF0,%ah
  105.     orb        $0x0C,%ah    // chop mode, single precision
  106. #endif
  107.     movl    %eax,single_cw
  108.  
  109. #if    id386
  110.     andb    $0xF0,%ah
  111.     orb        $0x08,%ah    // ceil mode, single precision
  112. #endif
  113.     movl    %eax,ceil_cw
  114.  
  115.     ret
  116.  
  117.